import {BasicColumn} from '/@/components/Table';
import {FormSchema} from '/@/components/Table';
import {dictItemCheck} from './dict.api';
import {rules} from '/@/utils/helper/validator';
import {h} from 'vue';

export const columns: BasicColumn[] = [
	{
		title: '字典名称',
		dataIndex: 'dictName',
		width: 240,
	},
	{
		title: '字典编码',
		dataIndex: 'dictCode',
		width: 240,
	},
	{
		title: '描述',
		dataIndex: 'description',
		// width: 120
	},
];

export const recycleBincolumns: BasicColumn[] = [
	{
		title: '字典名称',
		dataIndex: 'dictName',
		width: 120,
	},
	{
		title: '字典编码',
		dataIndex: 'dictCode',
		width: 120,
	},
	{
		title: '描述',
		dataIndex: 'description',
		width: 120,
	},
];

export const searchFormSchema: FormSchema[] = [
	{
		label: '字典名称',
		field: 'dictName',
		component: 'JInput',
		colProps: {span: 6},
	},
	{
		label: '字典编码',
		field: 'dictCode',
		component: 'JInput',
		colProps: {span: 6},
	},
];

export const formSchema: FormSchema[] = [
	{
		label: '',
		field: 'id',
		component: 'Input',
		show: false,
	},
	{
		label: '字典名称',
		field: 'dictName',
		required: true,
		component: 'Input',
	},
	{
		label: '字典编码',
		field: 'dictCode',
		component: 'Input',
		dynamicDisabled: ({values}) => {
			return !!values.id;
		},
		dynamicRules: ({model, schema}) => rules.duplicateCheckRule('sys_dict', 'dict_code', model, schema, true),
	},
	{
		label: '描述',
		field: 'description',
		component: 'Input',
	},
];

export const dictItemColumns: BasicColumn[] = [
	{
		title: '名称',
		dataIndex: 'itemText',
		width: 80,
	},
	{
		title: '数据值',
		dataIndex: 'itemValue',
		width: 80,
	},
	{
		title: '字典颜色',
		dataIndex: 'itemColor',
		width: 80,
		align: 'center',
		customRender: ({text}) => {
			return h('div', {
				style: {background: text, width: '18px', height: '18px', 'border-radius': '50%', margin: '0 auto'},
			});
		},
	},
];

export const dictItemSearchFormSchema: FormSchema[] = [
	{
		label: '名称',
		field: 'itemText',
		component: 'Input',
	},
	{
		label: '状态',
		field: 'status',
		component: 'JDictSelectTag',
		componentProps: {
			dictCode: 'dict_item_status',
			stringToNumber: true,
		},
	},
];

export const itemFormSchema: FormSchema[] = [
	{
		label: '',
		field: 'id',
		component: 'Input',
		show: false,
	},
	{
		label: '名称',
		field: 'itemText',
		required: true,
		component: 'Input',
	},
	{
		label: '数据值',
		field: 'itemValue',
		component: 'Input',
		dynamicRules: ({values, model}) => {
			return [
				{
					required: true,
					validator: (_, value) => {
						if (!value) {
							return Promise.reject('请输入数据值');
						}
						if (new RegExp("[`~!@#$^&*()=|{}'.<>《》/?！￥（）—【】‘；：”“。，、？]").test(value)) {
							return Promise.reject('数据值不能包含特殊字符！');
						}
						return new Promise<void>((resolve, reject) => {
							let params = {
								dictId: values.dictId,
								id: model.id,
								itemValue: value,
							};
							dictItemCheck(params)
								.then((res) => {
									res.success ? resolve() : reject(res.message || '校验失败');
								})
								.catch((err) => {
									reject(err.message || '验证失败');
								});
						});
					},
				},
			];
		},
	},
	{
		label: '颜色值',
		field: 'itemColor',
		component: 'Input',
		slot: 'itemColor',
	},
	{
		label: '描述',
		field: 'description',
		component: 'Input',
	},
	{
		field: 'sortOrder',
		label: '排序',
		component: 'InputNumber',
		defaultValue: 1,
	},
	{
		field: 'status',
		label: '是否启用',
		defaultValue: 1,
		component: 'JDictSelectTag',
		componentProps: {
			type: 'radioButton',
			dictCode: 'dict_item_status',
			stringToNumber: true,
		},
	},
];
